﻿namespace Digitalmes.Common.Extensions;

/// <summary>
/// <see cref="DateTime"/> 扩展。
/// </summary>
public static class DateTimeExtensions
{
    /// <summary>
    /// 将日期转换为当天的零点 00:00:00:000。
    /// </summary>
    /// <param name="dateTime"></param>
    /// <returns></returns>
    [return: NotNullIfNotNull(nameof(dateTime))]
    public static DateTime? MinTime(this DateTime? dateTime)
    {
        return dateTime?.Date;
    }

    /// <summary>
    /// 将当前时间转换为当天的零点，如果时间不存在，使用当前时间进行转换。
    /// </summary>
    /// <param name="dateTime"></param>
    /// <param name="days">对当前时间进行偏移的天数，默认为 0。</param>
    /// <returns></returns>
    public static DateTime MinTimeOrNow(this DateTime? dateTime, int days = 0)
    {
        return dateTime?.Date ?? DateTime.Now.AddDays(days).Date;
    }

    /// <summary>
    /// 将日期转换为当天的 23:59:59:999。
    /// </summary>
    /// <param name="dateTime"></param>
    /// <returns></returns>
    [return: NotNullIfNotNull(nameof(dateTime))]
    public static DateTime? MaxTime(this DateTime? dateTime)
    {
        return dateTime?.Date.AddMilliseconds(86_399_999); // 24 * 3600 * 1000 - 1
    }

    /// <summary>
    /// 将日期转换为当天的 23:59:59:999，如果时间不存在，使用当前时间进行转换。
    /// </summary>
    /// <param name="dateTime"></param>
    /// <returns></returns>
    public static DateTime MaxTimeOrNow(this DateTime? dateTime)
    {
        return dateTime?.Date ?? DateTime.Now.Date.AddMilliseconds(86_399_999);
    }
}
